package com.uubx.controller;


import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.uubx.exception.CustomerException;
import com.uubx.pojo.FeedBack;
import com.uubx.result.MessageCode;
import com.uubx.result.Result;
import com.uubx.result.ResultUtils;
import com.uubx.service.FeedBackService;

import com.uubx.vo.BatchVo;
import com.uubx.vo.FeedBackVo;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

@Controller
@ResponseBody
@Api(description = "反馈相关的接口")
@RequestMapping("/feedback")
public class FeedBackController {
      @Autowired
      private FeedBackService feedBackService;


    /**
     * 通过反馈信息的Id查询
     * @param id
     * @return
     */
    @RequestMapping(value = "/queryById",method = RequestMethod.POST)
    @ApiOperation(value = "通过反馈信息的Id查询",notes = "通过反馈信息的Id查询",httpMethod = "POST")
    @ApiResponses({
            @ApiResponse(code=200,message="请求成功! data代表返回的数据"),
            @ApiResponse(code=500,message="后台逻辑错误!"),
            @ApiResponse(code=404,message="找不到页面!"),
            @ApiResponse(code=405,message="请求方式不正确，比如后台接收是post，但前端请求的是get!"),
            @ApiResponse(code=406,message="页面地址和接口名冲突!"),
            @ApiResponse(code=415,message="请求格式不正确，前端可能没有把请求头修改为json，也可能前端请求的json对象没有转换为字符串!")
    })
    public Result queryFeedBackById(Long id){
        feedBackService.queryFeedBackById(id);
        return ResultUtils.buildSuccess();
    }

    /**
     * 通过id删除反馈信息
     * @param
     * @param
     * @return
     */
    @RequestMapping(value = "/deleteById",method = RequestMethod.POST)
    @ApiOperation(value = "通过id删除反馈信息",notes = "通过id删除反馈信息",httpMethod = "POST")
    @ApiResponses({
            @ApiResponse(code=200,message="请求成功! data代表返回的数据"),
            @ApiResponse(code=500,message="后台逻辑错误!"),
            @ApiResponse(code=404,message="找不到页面!"),
            @ApiResponse(code=405,message="请求方式不正确，比如后台接收是post，但前端请求的是get!"),
            @ApiResponse(code=406,message="页面地址和接口名冲突!"),
            @ApiResponse(code=415,message="请求格式不正确，前端可能没有把请求头修改为json，也可能前端请求的json对象没有转换为字符串!")
    })
    public Result deleteFeedBackById(@RequestBody Long id){

        feedBackService.deleteFeedBackById(id);

        return ResultUtils.buildSuccess();
    }

    /**
     * 添加反馈信息
     * @param
     * @param
     * @return
     */
    @RequestMapping(value = "/add",method = RequestMethod.POST)
    @ApiOperation(value = "添加反馈信息",notes = "添加反馈信息",httpMethod = "POST")
    @ApiResponses({
            @ApiResponse(code=200,message="请求成功! data代表返回的数据"),
            @ApiResponse(code=500,message="后台逻辑错误!"),
            @ApiResponse(code=404,message="找不到页面!"),
            @ApiResponse(code=405,message="请求方式不正确，比如后台接收是post，但前端请求的是get!"),
            @ApiResponse(code=406,message="页面地址和接口名冲突!"),
            @ApiResponse(code=415,message="请求格式不正确，前端可能没有把请求头修改为json，也可能前端请求的json对象没有转换为字符串!")
    })
    public Result saveFeedBack(@RequestBody FeedBack feedBack){
        feedBackService.saveFeedBack(feedBack);
        return ResultUtils.buildSuccess();
    }
    /**
     * 编辑反馈信息
     * @param
     * @param
     * @return
     */
    @RequestMapping(value = "/update",method = RequestMethod.POST)
    @ApiOperation(value = "编辑反馈信息",notes = "编辑反馈信息",httpMethod = "POST")
    @ApiResponses({
            @ApiResponse(code=200,message="请求成功! data代表返回的数据"),
            @ApiResponse(code=500,message="后台逻辑错误!"),
            @ApiResponse(code=404,message="找不到页面!"),
            @ApiResponse(code=405,message="请求方式不正确，比如后台接收是post，但前端请求的是get!"),
            @ApiResponse(code=406,message="页面地址和接口名冲突!"),
            @ApiResponse(code=415,message="请求格式不正确，前端可能没有把请求头修改为json，也可能前端请求的json对象没有转换为字符串!")
    })
    public Result updateFeedBack(@RequestBody FeedBack feedBack){
        feedBackService.updateFeedBack(feedBack);

        return ResultUtils.buildSuccess();
    }

    /**
     * 分页查询反馈信息
     * @param feedBackVo
     * @return
     * @throws CustomerException
     */
    @RequestMapping(value = "/query",method = RequestMethod.POST )
    @ApiOperation(value = "分页查询反馈信息",notes = "分页查询反馈信息",httpMethod = "POST"
           )//请求需要token
    @ApiResponses({
            @ApiResponse(code=200,message="请求成功! data代表返回的数据"),
            @ApiResponse(code=500,message="后台逻辑错误!"),
            @ApiResponse(code=404,message="找不到页面!"),
            @ApiResponse(code=405,message="请求方式不正确，比如后台接收是post，但前端请求的是get!"),
            @ApiResponse(code=406,message="页面地址和接口名冲突!"),
            @ApiResponse(code=415,message="请求格式不正确，前端可能没有把请求头修改为json，也可能前端请求的json对象没有转换为字符串!")
    })
    public Result queryAll(@RequestBody FeedBackVo feedBackVo)throws CustomerException{
        PageHelper.startPage(feedBackVo.getPageNum(),feedBackVo.getPageSize());
        //List<Map> mapList = feedBackService.queryAllFeedBack(feedBackVo);
        PageInfo<Map> pageInfo = new PageInfo<>(feedBackService.queryAllFeedBack(feedBackVo));
        if (pageInfo.getList().isEmpty()){
            throw new CustomerException(MessageCode.INSURANCE_EMPTY);
        }
        return ResultUtils.buildSuccess(pageInfo);
    }

    /**
     * 批量删除反馈信息
     * @param batchVo
     * @return
     */
    @RequestMapping(value = "/batchDelete",method = RequestMethod.POST)
    @ApiOperation(value = "批量删除反馈信息",notes = "批量删除反馈信息",httpMethod = "POST")
    @ApiResponses({
            @ApiResponse(code=200,message="请求成功! data代表返回的数据"),
            @ApiResponse(code=500,message="后台逻辑错误!"),
            @ApiResponse(code=404,message="找不到页面!"),
            @ApiResponse(code=405,message="请求方式不正确，比如后台接收是post，但前端请求的是get!"),
            @ApiResponse(code=406,message="页面地址和接口名冲突!"),
            @ApiResponse(code=415,message="请求格式不正确，前端可能没有把请求头修改为json，也可能前端请求的json对象没有转换为字符串!")
    }
    )
    public Result BatchDeleteFeedBack(@RequestBody BatchVo batchVo){
        if(batchVo.getIds()!=null){
          feedBackService.BatchDeleteFeedBack(batchVo);
        }
        return ResultUtils.buildSuccess();
    }






  }


